template <class T>
    class SingletonBase
    {
        public:
            static T& GetInstance()
            {
                static T oInstance ;
                return oInstance ;
            }
 
        protected:
            SingletonBase(){}
        
        private:
            SingletonBase( const SingletonBase& ) ;
            SingletonBase& operator=( const SingletonBase& ) {return *this;}
    };
 
    // Verwendung
    class MySingleton : public SingletonBase< MySingleton >
    {
        friend class SingletonBase< MySingleton >;
        
        private:
            MySingleton(){}
        
        //...
    };
    
int main(int argc, char** argv)
{
    MySingleton* singleton = &MySingleton::GetInstance();
    return 0;
}

Funktionsweise
---
Die Schablone ist eine Klasse, die das Grundgerüst, sprich die Funktionsweise, vorgibt. Alle Funktionen sowie die statische Variable zum speichern der Instanz sind generisch. Soll nun eine näher definierte Klasse als Singleton realisiert werden, so erbt diese Klasse von der Singletonschablone indem sie die Schablone parametrisiert.
Jede Klasse für die diese Vererbung definiert wurde, kann nun als Singleton instanziiert werden.

Instanziierung
---
Die Instanz des Singletons kann man sich mit "MySingleton* singleton = &MySingleton::GetInstance();" holen.

